#ifndef ARQUIVO_H
#define ARQUIVO_H

#include "./ModoAbertura.h"
#include "./DadosArquivo.h"

#include <QObject>
#include <QDateTime>
#include <QTextStream>
#include <QString>
#include <QList>
#include <QFile>
#include <QFileInfo>
#include <QByteArray>

namespace model
{
	class Cliente;

	class Arquivo : public QObject
	{
		Q_OBJECT
		public:
			explicit Arquivo( const QString &nome, const QString &nomeCompleto, const ModoAbertura &modo, QObject *parent = 0 );
			Arquivo( const QString &nome, QObject *parent = 0 ) :
				QObject( parent ), arq(NULL), nome( nome ), nomeCompleto( nome ), dados(NULL) {}
			virtual ~Arquivo();

			void setCliente( Cliente* );
			void removeCliente( Cliente *c, bool fechar = true );

			void atualizaDados();
			DadosArquivo getDadosArquivo();

			int getSize() const { return size; }

			QString getNome() const { return nome; }
			ModoAbertura getModoAbertura() const { return modo; }

			int getNumUsuarios() const { return usuarios.size(); }

			QByteArray* getByteArray() const;
			void apagar();
			void renomear( const QString&, const QString& );

			bool operator==( const QString& ) const;
			bool operator==( const Arquivo& ) const;
		private:
			QFile *arq;
			QString nome, nomeCompleto;
			ModoAbertura modo;
			QList<Cliente*> usuarios;
			DadosArquivo *dados;
			int size;

		signals:
			void fecharArquivo( Arquivo* );
	};
}
#endif
